import pyautogui

# --------  禁用保护  --------
# 运行过程中，用户动鼠标： 与用户不冲突
pyautogui.FAILSAFE = False
# 自动防故障
# 默认为True，这项功能意味着：当鼠标的指针在屏幕的最左上方，程序会报错；目的是为了防止程序无法停止
pyautogui.FAILSAFE = False

# # 每个动作后，停留两秒
pyautogui.PAUSE = 2


# --------  获取屏幕和鼠标的位置  --------
# 获取屏幕分辨率
print(pyautogui.size())

# 获取鼠标的坐标位置
x, y = pyautogui.position()
print("X: %s Y: %s" % (x, y))



# --------  鼠标移动案例  --------
# 1： 移动到回收站的位置,2表示移动过程两秒
pyautogui.moveTo(57, 285, 2)

# 3:
pyautogui.move(87, 200, 2)

# 2: 右击
pyautogui.rightClick()

# --------  鼠标拖拽  --------
# 1: 鼠标移动到指定位置---绝对（left表示鼠标左键，middle表示中间键， right表示右键）
pyautogui.dragTo(57, 285, button='left')
# 按住左键，用2s时间移动到100，200点的位置
pyautogui.dragTo(100, 200, 2, button='left')

# 按住左键，从当前位置向右移动100px，向下移动200px，用时2s
pyautogui.drag(100, 200, 2, button='left')



# --------  鼠标滚动  --------
# 2: 向下滚动：
pyautogui.scroll(-1000)
# 3: 向上滚动
pyautogui.scroll(1000)


# --------  mouseDown（）和mouseUp（）函数  --------
# 鼠标定位到我的电脑，进行右击
pyautogui.mouseDown(button="right", x=50, y=54)
pyautogui.mouseUp()

# 鼠标定位到属性，进行左击
pyautogui.mouseDown(button="left", x=86, y=356)
pyautogui.mouseUp()


# --------  hotkey函数的使用  --------
pyautogui.hotkey('ctrl', 'shift', 'esc')



# --------  截图和定位操作  --------
# 1:截取回收站的图片
img = pyautogui.screenshot('./images/screenshot.png', region=(1, 250, 90, 100))
print(img) # 图片类型

# 2：全屏搜索图片（回收站）---获取的会是一个区域
rect = pyautogui.locateOnScreen('./images/screenshot.png')
print(type(rect)) # 盒子类型
print(rect[0], rect[1], rect[2], rect[3])

# 3:在区域中获取中心位置
point = pyautogui.center(rect)
print(type(point)) # 点类型
x, y = point
print(x, y)

# 4: 双击中心位置
pyautogui.doubleClick(x, y)






# 1:截取回收站的图片
img = pyautogui.screenshot('./images/screenshot.png', region=(1, 250, 90, 100))
print(img)

# 2：全屏搜索图片（回收站）---获取的会是一个区域
point = pyautogui.locateCenterOnScreen('./images/screenshot.png')
print(type(point))
x, y = point
time.sleep(1)
# 4: 双击中心位置
pyautogui.doubleClick(x, y)





# 可以通过图片，在屏幕上定位图像所在的位置
# 找到返回的是一个4边距元组 (top, left, width, height)，没有找到返回None
# 全屏幕搜素
rect = pyautogui.locateOnScreen('./images/x3.png', confidence=0.6)
print(rect)





# 4：加速定位
	# 1： 指定搜索区域：
pyautogui.locateOnScreen('./images/computer.png', region=(0, 0, 400, 400))
	# 2： 降低图片颜色的饱和度：
pyautogui.locateOnScreen('./images/computer.png', grayscale=True)





# 五：图像处理
# 截屏
# pyautogui.screenshot(r'C:\screenshot.png', region=(0, 0, 300, 400)) # imageFilename=None, region=None,返回PIL.Image.Image
# 取色
# pix = pyautogui.pixel(220, 200) # 获取坐标(220,200)所在屏幕点的RGB颜色，返回三个元素的元组
# 点匹配色
# pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10) # tolerance参数红、绿、蓝误差范围 返回True或者False
# 找图
# pyautogui.locateOnScreen(r'C:\screenshot.png') # 返回 Box(left=0, top=0, width=300, height=400)，可以用pyautogui.center(a)返回中心坐标
# x, y = pyautogui.locateCenterOnScreen(r'C:\screenshot.png') # 取得图中心坐标
# pyautogui.locateAllOnScreen(r'C:\screenshot.png')) # 返回Box对象列表


# 四：弹窗处理
# 提示弹窗
# pyautogui.alert(text='要开始程序么？', title='请求框', button='OK') # 点击按钮或者关闭窗口都返回button的值。
# 选择弹窗
# pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel']) # OK和Cancel按钮的消息弹窗,返回点击按钮的值，关闭窗口返回None（或者Cancel）
# 输入弹窗
# pyautogui.prompt(text='', title='', default='') # 返回输入的值（按ok）或者None （按cancel）
# pyautogui.password(text='', title='', default='', mask='*') # 同上，输入显示为*




# 六：窗口操作
# Window 参数是窗口句柄
# getActiveWindow
# getActiveWindowTitle
# getWindowsAt
# getWindowsWithTitle
# getAllWindows
# getAllTitles